package com.baohua.dao;

import java.util.List;

import net.sf.json.JSONArray;

import com.baohua.model.Dictionary;
import com.baohua.model.DiningTable;
import com.baohua.model.Goods;
import com.baohua.model.OrdDinTabRel;
import com.baohua.model.OrderDetails;
import com.baohua.model.OrderHeader;

/**
 * 
 * @author Happy Everyday
 *
 */
public interface OrderDao {
	
	/**
	 * 删除订单-餐桌关系，根据tableId和orderHeaderId
	 */
	public int deleteTableByJA(JSONArray ja, long orderHeaderId);
	
	/**
	 * 添加订单-餐桌关系
	 */
	public void addTables(List<OrdDinTabRel> odtrLists);
	
	/**
	 * 根据订单ID删除订单跟桌子的关系记录
	 * @param orderHeaderId
	 */
	public void deleteOrdTabRelByOrderHeaderId(long orderHeaderId);
	
	/**
	 * 查询所以的桌子信息
	 */
	public List<DiningTable> queryAllDiningTable();
	
	/**
	 * 更新订单头信息
	 * @param orderHeader
	 */
	public void updateOrderHeader(String hql);
	/**
	 * 查找一张订单的商品总价格
	 * @param orderHeaderId
	 * @return
	 */
	public double findGoodsTotalPriceByOrderHeaderId(long orderHeaderId);
	/**
	 * 查找一张订单的商品总个数
	 * @param orderHeaderId
	 * @return
	 */
	public int findGoodsCountByOrderHeaderId(long orderHeaderId);
	/**
	 * 删除订单明细
	 * @param lists
	 */
	public void deleteOrderDetails(List<OrderDetails> lists);
	
	/**
	 * 更新订单明细信息
	 * @param orderDetailsId:订单明细Id
	 * @param amount:商品数量
	 * @param goodsTotalSalesPrice：单个商品总价值
	 */
	public int updateOrderDetails(JSONArray modifyGoods); 
	
	/**
	 * 更改指定订单的订单状态，例如：作废订单
	 */
	public int updateOrderByOrderHeaderId(long orderHeaderId, long dictionaryId);
	
	/**
	 * 根据订单头信息ID查询订单明细列表
	 * @param orderHeaderId 订单头信息ID
	 */
	public List<OrderDetails> findOrderDetailsByOrderHeaderId(long orderHeaderId);
	
	/**
	 * 查询orderHeader的记录数
	 * @return
	 */
	public long queryCountOrderHeader(String whereSql);
	
	/**
	 * 查询订单头信息列表
	 * @return 订单列表
	 */
	public List<OrderHeader> findListOrderHeader(String whereSql, int startPost, int pageSize);
	
	/**
	 * 保存订单明细
	 * @param listGoodsDetails 菜明细列表
	 */
	public void saveListOrderDetails(List<OrderDetails> listOrderDetails);
	
	/**
	 * 保存订单桌子关系
	 * @param orderDining
	 */
	public void saveListOrderDining(List<OrdDinTabRel> orderDining);
	
	/**
	 * 保存订单头信息
	 * @param orderHeader 订单头信息
	 * @return orderHeaderId
	 */
	public long saveOrderHeader(OrderHeader orderHeader);
	
	/**
	 * 查询餐桌By种类Id
	 * @param categoryId 种类Id
	 * @return 餐桌列表
	 */
	public List<DiningTable> findDiningTableByCategoryId(long categoryId);
	
	/**
	 * 根据种类代码查询种类值
	 * 该方法当属字典接口，取代接口：DictionaryDao.findDictionaryByCode
	 * @return 返回限定条件的所有种类
	 * @param 类别代码
	 */
	@Deprecated
	public List<Dictionary> findCategoryByCode(String categoryCode); 
	
	/**
	 * 根据给的的种类查询该类的所以菜
	 * @param categoryId 菜的种类
	 * @return 该类的所以菜
	 */
	public List<Goods> findDishByGoodsCategory(long categoryId);
	
	/**
	 * 查询所以的商品
	 * @return
	 */
	public List<Goods> findAllGoods();

}
